package com.m.job.server.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.client.job.core.model.MJobInstance;
import com.m.job.server.model.MJobInstanceDto;

import java.util.List;

/**
 * 任务机器 - 数据库访问层
 * 
 * @author monxz
 * @version 2021-07-18
 */
@Mapper
public interface MJobInstanceMapper {

	/**
	 * 通过ID查询单条数据
	 *
	 * @param
	 * @return 实例对象
	 */
	MJobInstanceDto get(String machineId);

	/**
	 * 列表数据查询
	 *
	 * @param mJobInstanceDto 查询条件
	 * @return 对象列表
	 */
	List<MJobInstanceDto> getList(MJobInstanceDto mJobInstanceDto);

	/**
	 * 精确查询
	 * 
	 * @param mJobInstanceDto
	 * @return
	 */
	List<MJobInstanceDto> getExctList(MJobInstanceDto mJobInstanceDto);

	/**
	 * 查询同意类型任务的机器
	 * 
	 * @param jobCode
	 * @return
	 */
	List<MJobInstanceDto> getListByJobCode(@Param("jobCode") String jobCode,@Param("serverStatus")Integer serverStatus,@Param("jobStatus")Integer jobStatus);

	/**
	 * 新增数据
	 *
	 * @param mJobInstanceDto 实例对象
	 * @return 影响行数
	 */
	Integer insert(MJobInstanceDto mJobInstanceDto);

	/**
	 * 修改数据
	 *
	 * @param mJobInstanceDto 实例对象
	 * @return 影响行数
	 */
	Integer update(MJobInstanceDto mJobInstanceDto);
	
	/**
	 * 修改应用上所有Job信息
	 * @param mJobInstanceDto
	 * @return
	 */
	Integer updateByServerPort(MJobInstanceDto mJobInstanceDto);
	
	/**
	 * 批量修改服务状态
	 * @param idList
	 * @param jobStatus
	 * @return
	 */
	Integer  updateJobStatusByIdList(@Param("idList")List<String> idList,@Param("jobStatus") Integer jobStatus,@Param("serverStatus") Integer serverStatus);
	
	/**
	 * 根据id查询
	 * @param idList
	 * @return
	 */
	List<MJobInstance> getListByIdList(@Param("idList")List<String> idList,@Param("jobStatus") Integer jobStatus);

	/**
	 * 删除
	 *
	 * @param machineId 实例对象
	 * @return 影响行数
	 */
	Integer delete(String machineId);

	/**
	 * 删除节点
	 * 
	 * @param appName
	 * @param port
	 */
	void delByAppNameAndPort(@Param("appName") String appName, @Param("port") String port);

	/**
	 * 根据任务id查询实例
	 * 
	 * @param jobIdList
	 * @return
	 */
	List<MJobInstanceDto> getListByJobIds(@Param("jobIdList")  List<String> jobIdList,@Param("serverStatus")Integer serverStatus,@Param("jobStatus")Integer jobStatus);

	/**
	 * 任务重拍
	 * 
	 * @param mJobInstanceDto
	 * @return
	 */
	Integer reSort(MJobInstanceDto mJobInstanceDto);

	/**
	 * 根据服务器信息和JobName定位唯一实例
	 * 
	 * @param appName
	 * @param port
	 * @param jobName
	 * @return
	 */
	MJobInstance getByServerInfoAndJobName(@Param("appName") String appName, @Param("port") String port,
			@Param("jobName") String jobName);
	
	

}